package com.leaf.u_spring.chapter04;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 演出效果 
 * 相同的切点表达式重复了4遍
 * @Ponitcut注解能够在一个@AspectJ切面内定义可重用的切点
 * 
 */
@Aspect
public class Audience2 {

	/**
	 * 定义命名的切点
	 */
	@Pointcut("execution(** com.leaf.u_spring.chapter04.Performance.perform(..))")
	public void performance(){}
	
	/**
	 * 表演之前
	 */
	@Before("performance())")
	public void silenceCellPhones(){
		System.out.println("silence Cell Phones");
	}
	
	/**
	 * 表演之前
	 */
	@Before("performance())")
	public void takeSeates(){
		System.out.println("taking seates");
	}
	
	
	/**
	 * 表演之后
	 */
	@AfterReturning("performance())")
	public void applause(){
		System.out.println("CLAP CLAP CLAP!!!");
	}
	
	/**
	 * 表演失败之后
	 */
	@AfterThrowing("performance())")
	public void demandRefund(){
		System.out.println("Demanding a refund");
	}
	
}
